import store from '@/store'
import * as util from '@/utils/util'
import {
	paginate
} from '@/common/constant'

/**
 * 显示成功提示框
 */
export const showSuccess = (msg, callback) => {
	uni.showToast({
		title: msg,
		icon: 'success',
		mask: true,
		duration: 1500,
		success() {
			callback && callback()
		}
	})
}

/**
 * 显示失败提示框
 */
export const showError = (msg, callback) => {
	uni.showModal({
		title: '友情提示',
		content: msg,
		showCancel: false,
		success(res) {
			callback && callback()
		}
	})
}

/**
 * 显示纯文字提示框
 */
export const showToast = (msg, duration = 1500) => {
	uni.showToast({
		title: msg, // 提示的内容
		icon: 'none',
		mask: true, // 是否显示透明蒙层，防止触摸穿透
		duration // 提示的延迟时间，单位毫秒，默认：1500	
	})
}

/**
 * tabBar页面路径列表 (用于链接跳转时判断)
 * tabBarLinks为常量, 无需修改
 */
export const getTabBarLinks = () => {
	const tabBarLinks = [
		'pages/index/index',
		'pages/category/index',
		'pages/cart/index',
		'pages/user/index'
	]
	return tabBarLinks
}

/**
 * 生成完整的H5地址 [带参数]
 * @param {string} h5Url H5访问地址
 * @param {string} path 页面路径
 * @param {object} params 页面参数
 * @return {string}
 */
export const buildUrL = (h5Url, path, params) => {
	let complete = h5Url
	if (!util.isEmpty(path)) {
		complete += '#/' + path
		const shareParamsStr = getShareUrlParams(params)
		if (!util.isEmpty(shareParamsStr)) {
			complete += '?' + shareParamsStr
		}
	}
	return complete
}

/**
 * 生成转发的url参数(string格式)
 */
export const getShareUrlParams = (params) => {
	return util.urlEncode({
		refereeId: store.getters.userId, // 推荐人ID
		...params
	})
}

/**
 * 跳转到指定页面url
 * 支持tabBar页面
 * @param {string}  url   页面路径
 * @param {object}  query 页面参数
 * @param {string}  modo  跳转类型(默认navigateTo)
 */
export const navTo = (url, query = {}, modo = 'navigateTo') => {
	if (!url || url.length == 0) {
		return false
	}
	// tabBar页面, 使用switchTab
	if (util.inArray(url, getTabBarLinks())) {
		uni.switchTab({
			url: `/${url}`
		})
		return true
	}
	// 生成query参数
	const queryStr = !util.isEmpty(query) ? '?' + util.urlEncode(query) : ''
	// 普通页面, 使用navigateTo
	modo === 'navigateTo' && uni.navigateTo({
		url: `/${url}${queryStr}`
	})
	// 特殊指定, 使用redirectTo
	modo === 'redirectTo' && uni.redirectTo({
		url: `/${url}${queryStr}`
	})
	return true
}

/**
 * 获取购物车商品总数量
 * @param {*} value 
 */
export const getCartTotalNum = (value) => {
	const cartTotal = uni.getStorageSync('cartTotalNum') || 0
	return checkLogin() ? cartTotal : 0
}

/**
 * 记录购物车商品总数量
 * @param {*} value 
 */
export const setCartTotalNum = (value) => {
	uni.setStorageSync('cartTotalNum', Number(value))
}

/**
 * 设置购物车tabbar的角标
 * 该方法只能在tabbar页面中调用, 其他页面调用会报错
 */
export const setCartTabBadge = () => {
	const cartTabbarIndex = 2
	const cartTotal = getCartTotalNum()
	if (cartTotal > 0) {
		uni.setTabBarBadge({
			index: cartTabbarIndex,
			text: `${cartTotal}`
		})
	} else {
		uni.removeTabBarBadge({
			index: cartTabbarIndex
		})
	}
	return
}

/**
 * 验证是否已登录
 */
export const checkLogin = () => {
	// return !!store.getters.userId
	return !!uni.getStorageSync('token')
}

/**
 * 发起微信小程序支付请求
 * @param {Object} 参数
 */
export const wxPayment = (option) => {
	const options = {
		timeStamp: '',
		nonceStr: '',
		prepay_id: '',
		paySign: '',
		...option
	}
	return new Promise((resolve, reject) => {
		uni.requestPayment({
			provider: 'wxpay',
			timeStamp: options.timeStamp,
			nonceStr: options.nonceStr,
			'package': `prepay_id=${options.prepay_id}`,
			signType: 'MD5',
			paySign: options.paySign,
			success: res => resolve(res),
			fail: res => reject(res)
		})
	})
}
/**
 * 发起app微信支付请求
 * @param {Object} 参数
 */
export const wxAppPayment = (option) => {
	return new Promise((resolve, reject) => {
		uni.requestPayment({
			provider: option.provider,
			orderInfo:option.orderInfo,
			success: res => resolve(res),
			fail: res => reject(res)
		})
	})
}

/* app支付宝支付 */
export const aliAppPayment = (option) => {
	return new Promise((resolve, reject) => {
		uni.requestPayment({
			appId: option.appId,
			mchId:option.mchId,
			privateKey:option.privateKey,
			success: res => resolve(res),
			fail: res => reject(res)
		})
	})
}

export const callPay = (response) => {
	if (!response) {
		return
	}
	if (typeof WeixinJSBridge === "undefined") {
		if (document.addEventListener) {
			document.addEventListener('WeixinJSBridgeReady', onBridgeReady(response), false);
		} else if (document.attachEvent) {
			document.attachEvent('WeixinJSBridgeReady', onBridgeReady(response));
			document.attachEvent('onWeixinJSBridgeReady', onBridgeReady(response));
		}
	} else {
		onBridgeReady(response);
	}
}

export const onBridgeReady = (response) => {
	let app = this;
	return new Promise((resolve, reject) => {
		WeixinJSBridge.invoke(
			'getBrandWCPayRequest', {
				"appId": response.appId, //公众号名称，由商户传入
				"timeStamp": response.timeStamp, //时间戳，自1970年以来的秒数
				"nonceStr": response.nonceStr, //随机串
				"package": response.package,
				"signType": response.signType, //微信签名方式：
				"paySign": response.paySign //微信签名
			},
			function(res) {
				setTimeout(function() {
					uni.hideLoading();
				}, 1000)
				if (res.err_msg === "get_brand_wcpay_request:ok") {
					resolve(res)
					uni.showLoading({
						title: '支付成功'
					});
				} else {
					uni.showLoading({
						title: '支付失败'
					});
				}
				// WeixinJSBridge.log(response.err_msg);
			}
		)
	})
}


/* 微信分享 */
export const sendMessage = () => {
	WeixinJSBridge.on('menu:share:appmessage', function(argv) {
		WeixinJSBridge.invoke('sendAppMessage', {
			"appid": this.$apistore.appId, //appid 设置空就好了。
			"img_url": imgUrl, //分享时所带的图片路径
			"img_width": "120", //图片宽度
			"img_height": "120", //图片高度
			"link": url, //分享附带链接地址
			"desc": "我是一个介绍", //分享内容介绍
			"title": "标题，再简单不过了。"
		}, function(res) {
			/*** 回调函数，最好设置为空 ***/
		});
	});
}

/**
 * 加载更多列表数据
 * @param {Object} resList 新列表数据
 * @param {Object} oldList 旧列表数据
 * @param {int} pageNo 当前页码
 */
export const getEmptyPaginateObj = () => {
	return util.cloneObj(paginate)
}

/**
 * 加载更多列表数据
 * @param {Object} resList 新列表数据
 * @param {Object} oldList 旧列表数据
 * @param {int} pageNo 当前页码
 */
export const getMoreListData = (resList, oldList, pageNo) => {
	// 如果是第一页需手动制空列表
	if (pageNo == 1) oldList.data = []
	// 合并新数据
	return oldList.data.concat(resList.data)
}
